# 1、写函数,将传入的列表或元祖对象的奇数位索引对应的元素
"""
# a = ["asd","123",1,4,6]  #第一种方法：有参无返回
# bb = [2,3,4,5,6,6,6,7,7,8,8]
# def b(args):
#     for i in range(len(args)):
#         if i%2!=0:
#             print(args[i],end=" ")
# b(bb)


# c = (1,23,3,4)   第二种方法有参有返回
# def list1(a):
#     return a[1::2]
# list1(c)
# print(list1(c))


# c = (1, 23, 3, 4)  #第三种方法无参无返回
# def list3():
#     # c = (1, 23, 3, 4)
#     print(c[1::2])
# list3()


# c = (1, 23, 3, 4)  #第四种方法 无参无返回
# def list2():
#     # c = (1, 23, 3, 4)
#     return c[1::2]
# print(list2())
"""
# 2、写函数,判断用户传入的对象(string,list,tuple)长度是否大于5
"""
def a(con):
    if type(con) == str and len(con) >5:
      print("传入的字符串长度大于5")
    elif type(con) == str and len(con) <5:
      print("传入的字符串长度小于5")
    elif type(con) == list and len(con)>5:
      print("传入的列表长度大于5")
    elif type(con) == list and len(con)<5:
      print("传入的列表长度小于5")
    elif type(con) ==tuple and len(con)>5:
      print("传入的元组长度大于5")
    elif type(con) == tuple and len(con)<5:
      print("传入的元组长度小于5")
a([123213,235,433,654645,747457,345345,234234,1234,8])
"""
# 3、写函数,计算传入的string中,数字,字母,空格以及其它内容的个数,并返回结果
"""
def count(result):
    num = 0
    space = 0
    str = 0
    other = 0
    for i in result:
      if i in "0123456789":
           num+=1
      elif i in " ":
           space+=1
      elif (i >= "a"and i <="z") or(i >= "A"and i <= "Z"):
           str+=1
      else:
           other+=1
    print(f"字母有{str},数字有{num},空格有{space},其他有{other}")
count("adsas 14124 12412 &*^&*%&^$")
"""
# 4、写函数,接收两个数字参数,返回较大的那个数字
"""
# def max_num(a,b):
#     if a>b:
#         print("最大的数字是%s"%a)
#     elif a<b:
#         print("最大的数字是%s"%b)
# max_num(15,80)
"""
# 5、编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
"""
# def cacluate(a,*b):
#     print(a,b)
# cacluate(1,2,3,4,"213","asjkdaksjh")
"""
# 6、编写一个函数, 接收字符串参数, 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
"""
def a(result):
    cap_count = 0
    small_count = 0
    for i in result:
        if i >="a" and i <="z":
            small_count+=1
        elif i >="A" and i<="Z":
            cap_count+=1
    return cap_count,small_count
"""
# 7、编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和一个整形数k, 返回一个新列表.
# def new_list(k:int):
#     result = []
#     for i in range(30):
#         result.append(random.randint(1,100))
#     print(result)
#     list1 = result[:k][::-1]
#     list2 = result[k:][::-1]
#     return list1+list2
# 函数需求:
# 将列表下标k之前对应(不包含k)的元素逆序;
# 将下标k及之后的元素逆序;
# 8、编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值
# 9、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
# 10、写函数,接收n个数字,返回这些数字的和(动态传参)
# 11、在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs里
# 12、写函数,把传过来的列表中的每一个元素都用"_"拼接,并返回
# 13、写函数,传入一个数字,返回这个数的阶乘。示例：1x2x3....
# 14、写函数,返回一个扑克牌列表,里面有52项,每一项都是一个tuple
# 15、编写函数，求1+2+3+…N的和
# 16、编写一个函数，求多个数中的最大值
# 17、编写一个函数，提取指定字符串中所有的字母，然后拼接在一起产生一个新的字符串
# 18、写一个函数，求多个数的平均值
# 19、写一个自己的len函数，统计指定序列中元素的个数
# 20、找出传入的列表或元组的奇数位对应的元素，并返回一个新的列表
# 21、水仙花数：个位、十位、百位的立方加在一起等于数的本身
# 22、 定义函数，有一个形参，传入的是列表，数组大小不超过 100个，
# 数组中的每个元素值不允许超过 100，但是可以等于100，
# 如果列表大小超过了100个截取到第100个为止，要求返回的列表格式：
# 删除所有重复元素，使得每个元素只出现一次
# 按照数字的大小，由高到低排序返回
# 23、定义函数 getLength，打印用户传入的容器类型和数据长度
# 24、定义函数 generateNum( )
# 25、定义函数 moreThan(num)，判断输入的数字是否大于1500
"""
def moreThan(num):
       if num >1500:
           print("您输入的数字大于1500")
       else:
           print("您输入的数字小于1500")
moreThan(6) #括号里面随便写数
"""
# 26、定义函数，有两个形参，第一个形参到第二个形参的范围，所有平方数之和
"""
def Square_number(a,b):
    result = 0
    for i in range(a,b+1):
        result+=i**2
    return result
"""
# 27、写函数，检查传入字典的每一个value长度，如果大于2，
# 那么仅保留前两个长度的内容， 并将新内容返回给调用者
"""
def new_dict(dict1:dict):
    for key,value in dict1.items():
        if len(value) > 2:
            dict1[key] = value[:2]
    return dict1
"""
#  28、写函数，判断用户传入的对象（字符串、列表、元组）的元素是否为空
"""
def con(a):
    if len(a) == 0:
        print("是空的")
    else:
        print("不是空的")
        return a
con((1,2,2,3))
con(())
con([1,2,2,3])
con([])
con("1,2,2,3")
con("")
"""
# 29、编写自定义函数，完成一个简单的减法运算函数# 30、编写自定义函数，可以输出自己的名字即可
"""
def name(result):
    return  result
result = "liuziming"
print(result)
"""
# 31、编写自定义函数：剪刀石头布
# 游戏开始，初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分。
#
#  当用户为 0 分时，游戏结束，提示游戏结束，比赛输了
#
# 当用户为 200 分时，游戏结束，提示游戏结束，赢得比赛、每轮比赛都输出当前的分数
#
# 1 代表剪刀 2 代表石头 3 代表布
"""
import random
def play_game():
    user_score = 100
    computer_score = 100
    while user_score > 0 and user_score < 200:
        user_choice = int(input("请输入你的选择（1:剪刀, 2:石头, 3:布）: "))
        computer_choice = random.randint(1, 3)
        if user_choice == computer_choice:
            print("平局，重新开始一局！")
        elif (user_choice == 1 and computer_choice == 3) or \
             (user_choice == 2 and computer_choice == 1) or \
             (user_choice == 3 and computer_choice == 2):
            print("你赢了这一局！")
            user_score += 10
            computer_score -= 10
        else:
            print("你输了这一局！")
            user_score -= 10
            computer_score += 10
        print(f"当前分数： 用户 {user_score} - 电脑 {computer_score}")
    if user_score <= 0:
        print("游戏结束，你输了比赛。")
    else:
        print("游戏结束，你赢得了比赛！")
play_game()
"""
# 32、编写一个函数，接受一个字符串作为参数，并返回该字符串的逆序字符串
"""
def str1(result):
    return result[::-1]
print(str1("auodhbnuoasibndasewetwetwetddfsdfsdfqrgsdhfj"))
"""
# 33、编写一个函数，接受一个数字列表作为参数，并返回其中所有偶数的列表
"""
def int_list1(*result):
    oushu_list = []
    for i in result:
        if i %2 == 0:
            oushu_list.append(i)
    print(oushu_list)
int_list1(1,23,12,4,345345,346,345345,34234,32423525,43634,234,23)
"""
# 34、编写一个函数，接受一个字符串列表作为参数，并返回其中最长的字符串。
"""
def string_list1(*result):
    max_list = []
    for i in result:
        if len(i) > len(max_list):
            max_list = i  #max_list=" asfsaf"
    print(max_list)
string_list1(" asfsaf","safasfgsag","2379847239875","i")
"""
# 35、编写一个函数，接受一个数字列表作为参数，并返回其中所有数字的平方的总和
"""
# def square_sum(sum_list):
#     m = 0
#     for i in sum_list:
#         i=i**2  # i=1
#         m=m+i  # m=1
#     return m
# list1=[1,2,3]
# result = square_sum(list1)
# print(result)
"""
# 36、编写一个函数，接受一个字符串作为参数，并返回其中所有单词的首字母的大写形式
"""
def cap_first(string):
    # 使用 split() 方法将字符串分割成单词
    words = string.split()
    # 使用列表推导式将每个单词的首字母大写
    A_words = [i.capitalize() for i in words]
    # 使用 join() 方法将单词重新组合成字符串
    result_string = ' '.join(A_words)
    return result_string
# 测试
input_str = "hello world example one TWO"
result = cap_first(input_str)
print(result)
"""
# 37、编写一个函数，接受两个列表作为参数，并返回两个列表的交集
# 举例：
# list1 = [100,200,300,454]
# list2 = [454,789,125,46]
# 返回：[454]
"""
# list1 = [100,200,300,454]
# list2 = [454,789,125,46]
# set1 =set(list1)
# set2 =set(list2)
# def a(b):
#     if set1 & set2:
#         return
# result=(set1&set2)
# print(result)
"""
#  38、定义一个学生注册函数enroll()，打印学生姓名，性别，年龄，城市， 使用默认参数降低调用函数的复杂度